// const computedBehavior = require('miniprogram-computed')

// module.exports = Behavior({
//     behaviors: [computedBehavior],

// })

// behavior.js
module.exports = Behavior({
    lifetimes: {
        created() {
            this._originalSetData = this.setData // 原始 setData
            this.setData = this._setData // 封装后的 setData
        }
    },
    definitionFilter(defFields) {
        const computed = defFields.computed || {}
        const computedKeys = Object.keys(computed)
        const computedCache = {}

        // 计算 computed
        const calcComputed = (scope, insertToData) => {
            const needUpdate = {}
            const data = defFields.data = defFields.data || {}

            for (let key of computedKeys) {
                const value = computed[key].call(scope) // 计算新值
                if (computedCache[key] !== value) needUpdate[key] = computedCache[key] = value
                if (insertToData) data[key] = needUpdate[key] // 直接插入到 data 中，初始化时才需要的操作
            }

            return needUpdate
        }

        // 重写 setData 方法
        defFields.methods = defFields.methods || {}
        defFields.methods._setData = function (data, callback) {
            const originalSetData = this._originalSetData // 原始 setData
            originalSetData.call(this, data, callback) // 做 data 的 setData
            const needUpdate = calcComputed(this) // 计算 computed
            originalSetData.call(this, needUpdate) // 做 computed 的 setData
        }

        // 初始化 computed
        calcComputed(defFields, true) // 计算 computed
    }
})